「強硬的將變數改變型態會發生什麼問題?」詩憶好奇地發問。
「什麼都可能發生。」
唯心從包裡掏出一張紙,展開後放在詩憶桌上,這是一張因為放歪而印壞的A4紙。
「好一點的情況,像這張講義,列印超出範圍,內容被截斷仍然可以取得一些資訊,這通常發生在相似型態之間的轉換;壞一點的情況,不同資訊湊在一起,讓程式崩壞。」
她手腕一轉,「唰」地一聲將講義翻面,各種顏色的計算式中間還混雜少許塗鴉,看起來是被某人當作廢紙利用。
唯心把紙張摺好收回包裡,拿出另一張白紙。「剛剛說的好壞是針對程式是否能執行,如果是考慮到結果正確性的話,前者也可能會很糟糕,因為沒注意到程式裡被埋下一顆未爆彈。」
詩憶緊張的吞了吞口水。
唯心放下筆,以指節敲擊單詞Numbers
、Booleans
、Characters
、Strings
和Arrays
。「這些是基本型態,中文翻譯成數字、布林值、字元、字串和陣列,其他型態都來自它們的組合。」
資訊太多,詩憶一時腦袋轉不過來。
「這些不難記,之前妳已經見過半數的成員——Characters
、Characters
和Numbers
。」唯心不知道詩憶腦海裡還存著剛剛的塗鴉,打開之前的程式檔案,把'+'
和"Hello World!"
指出來。「單引號包夾的是字元Characters
,雙引號包夾的是字串String
;兩者的差別還有一個,字元只有一個字符。」
最後她把游標移動到1
上,想了想決定講更多一點,開了一個新檔案。
「至於數字Number
的話,剛剛提到的相似型態,正好可以用數字大家庭說明。小數在程式裡被稱為浮點數,把浮點數直接轉型成整數,會只留整數的地方。」
fun main() {
val x = 1.5
val y = x.toInt()
println(x)
println(y)
}
程式結果輸出1.5
和1
。
fun main() {
val x = -1.5
val y = x.toInt()
println(x)
println(y)
}
程式結果輸出-1.5
和-1
。
「既然說是大家庭,成員當然不止兩位。根據能存的數字長度,整數又被分成四個形態,其中最常用的是Int
和Long
。單純寫1
就是Int
,想表明是Long
的話寫成1L
。而浮點數就只分成兩個,Float
和Double
。這兩張圖是從官網印下來的,給妳參考。」
詩憶從她手中接過兩張印得整整齊齊的A4紙。
https://kotlinlang.org/docs/basic-types.html#integer-types
https://kotlinlang.org/docs/basic-types.html#floating-point-types
注意到外面的天色暗下來,而基本型態除布林值和陣列以外也差不多講完了,唯心走去窗邊低頭注視下方的行人。
「至於無符號整數,這堂課是不會考,不過可以先記著它的存在,因為沒有負數的存在,最大值大了近兩倍。比如Int
的最大值是2的31次方減1,對應的UInt
範圍就是0到2的32次方減1。布林值和陣列我們用到時再說,外面雨好像停了,一起去吃晚餐吧。」來時濕掉的外衣已經乾了,她穿上後挽著提包,在門邊等著詩憶。